package com.itany.corejava.code16_反射;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.Properties;

/**
 * @author MissChen
 * @date 2024年03月28日 8:50
 */
public class EmpFactory {
    private static Properties p;
    static{
        p=new Properties();
        try {
            p.load(EmpFactory.class.getClassLoader().getResourceAsStream("emp.properties"));
            System.out.println(p);
        } catch (IOException e) {

            throw new ExceptionInInitializerError("加载资源文件出错");
        }
    }
    public static Emp getEmp() throws IllegalAccessException, InstantiationException {
        //当加载完emp.properties文件，文件中的数据已经存储到properties集合中去

       Class<Emp> c= Emp.class;
       //通过Class获取对应类的午餐构造方法创建对象
       Emp e=c.newInstance();
       //获取Emp对象中所有的属性
        Field[] fields=c.getDeclaredFields();
        for(Field field:fields){
            //在每个属性上，都是@Value注解为指定属性赋值
            Annotation annotation=field.getAnnotation(Value.class);

            //获取到注解中value所对应的值
            String key=((Value) annotation).value();
            System.out.println(key);

            //将上面获取到注解中value的值作为properties中的key
            String result=p.getProperty(key);

            //取消权限检查
            field.setAccessible(true);

            //为属性赋值
            field.set(e,result);


        }
        return e;


    }
}
